<?php
/**
 * @author jonathan <jo.link.noir@gmail.com>
 * @version 1.0: jo_link_noir
 * @date 03-01-2010
 */
class U1_Account_Register extends SF_Form
{
	/**
	* Crée un formulaire avec la méthode post.
	* @param string $action = self::DEFAULT_ACTION
	*/
	public function __construct($action = self::DEFAULT_ACTION)
	{
		if (!SW_Race::defined())
			SW_Race::init(U1_Race::getRace());
		parent::__construct('post', $action);
	}

	public function init()
	{
		$this->addElement(new SF_Form_Element_Text('pseudo', array(
			'validators'=> array(
				new SF_Validate_StringLength(5, 20),
				new SF_Validate_Regex('/[^a-zA-z0-9_@-]/')
			)
		)))
		->addElement(new SF_Form_Element_Password('password', array(
			'validators'=> array(
				new SF_Validate_StringLength(8)
			)
		)))
		->addElement(new SF_Form_Element_Password('confirm', array(
			'validators'=> array(
				new SF_Validate_EqualValue($this->elements['password'], 'getValue')
			)
		)))
		->addElement(new SF_Form_Element_Text('mail', array(
			'validators'=> array(
				new SF_Validate_StringLength(0, 50),
				new SF_Validate_Email()
			)
		)))
		->addElement(new SF_Form_Element_Select('race', array(
			'enum' => U1_Race::getRace()
		)))
		->addElement(new SF_Form_Element_Boolean('settlement'));
	}

	/**
	* Retourne true si le formulaire à été valider.
	* @param array $values = NULL
	* @return bool
	*/
	public function isSubmit(array $values = NULL)
	{
		return $values ? isset($values['register']) : isset($_POST['register']);
	}

	/**
	 * @return int : id de l'utilisateur
	 * @exception SW_DAO_Exception
		1 : Le pseudo est déjà utiliser
		2 : L'adresse mail est déjà utiliser
		3 : Un compte sous le même pseudo attend d'être valider
	 */
	public function insert()
	{
		return U1_DAO_User::insert(
			$this->elements['pseudo']->getUnfilteredValue(),
			$this->elements['password']->getUnfilteredValue(),
			U1_Race::getIndex($this->elements['race']->getUnfilteredValue()),
			$this->elements['mail']->getUnfilteredValue()
		);
	}
}